// 这里用到一个很实用的 npm 模块，用以在同一行打印文本
let slog = require('single-line-log').stdout;

class ProgressBar {
    description: String
    length: any
    constructor(description: String, bar_length: Number) {
        this.description = description || 'Progress';       // 命令行开头的文字信息
        this.length = bar_length || 25;                     // 进度条的长度(单位：字符)，默认设为 25
    }
    // 刷新进度条图案、文字的方法
    render({ completed, total }) {
        let percent: any = (completed / total).toFixed(4);    // 计算进度(子任务的 完成数 除以 总数)
        let cell_num = Math.floor(percent * this.length);             // 计算需要多少个 █ 符号来拼凑图案
        // 拼接黑色条
        let cell = '';
        for (let i = 0; i < cell_num; i++) {
            cell += '█';
        }
        // 拼接灰色条
        let empty = '';
        for (let j = 0; j < this.length - cell_num; j++) {
            empty += '░';
        }
        // 拼接最终文本
        let cmdText = this.description + ': ' + (100 * percent).toFixed(2) + '% ' + cell + empty + ' ' + completed + '/' + total;
        // 在单行输出文本
        slog(cmdText);
    };
}

export function bar(num: number, total: number) {
    var pb = new ProgressBar('执行进度', 50);

    // 这里只是一个 pb 的使用示例，不包含任何功能
    function downloading() {
        if (num <= total) {
            // 更新进度条
            pb.render({ completed: num, total: total });

            num++;
            setTimeout(function () {
                downloading();
            }, 500)
        }
    }
    downloading()

}



